home *** CD-ROM | disk | FTP | other *** search
/ Spanish Scene 1 / SpanishScene1.iso / spanish pack n°1 by llfb / --llfb-- / programas / sources1.dms / sources1.adf / SOURCES / Vectores / RayVector.ASM < prev    next >
Assembly Source File  |  1996-06-04  |  13KB  |  417 lines

  1. ;RAYTRACING FILL2 BY LADO OF FI-RE CREW IN 1992 !
  2.     
  3.     
  4. ;    org $25000
  5. ;    load $25000
  6.  
  7.  
  8.     Section    Roman,code_c
  9.  
  10.     
  11. ;    >extern 'DF0:raytr.dat',sinus
  12.     
  13.  
  14. j    lea $30000,a0             ;memoria torlese
  15. lo    clr.l (a0)+
  16.     cmp.l #$70000,a0
  17.     bcs lo
  18.     
  19.     lea $dff000,a6           ;custom
  20. ujn    move.l 4(a6),d0
  21.     lsr.l #8,d0
  22.     cmp.w #$130,d0
  23.     bne ujn
  24.     move.w #$7fff,$96(a6)    ;clear  DMACON
  25.     move.w #$7fff,$9a(a6)    ;clear  INTENA
  26.     move.l #copper,$84(a6)   
  27.     clr.w $8a(a6)            ;start copper
  28.     move.w #$87d0,$96(a6)    ;DMACON
  29.     move.w #$c010,$9a(a6)
  30.  
  31. h1    bsr wait                 ;waitblitter
  32. h2    move.l 4(a6),d0
  33.     lsr.l #8,d0
  34.     cmp.w #$d0,d0
  35.     bne h2
  36.     bsr filler               
  37.     btst #6,$bfe001
  38.     bne h1
  39.     bsr wait
  40.     
  41.     move.w #$7fff,$96(a6)
  42.     move.w #$7fff,$9a(a6)
  43.     clr.w $88(a6)            ;start original copper
  44.     move.w #$87f0,$96(a6)
  45.     move.w #$e02c,$9a(a6)
  46.     clr.l d0
  47.     rts                      ;END
  48.     
  49.  
  50. filler    clr.l nagyx
  51.     move.l #$7fff7fff,kisx
  52.     add.w #2,addx           ;xszog novelese
  53.     and.w #$1ff,addx   
  54.     add.w #4,addy           ;yszog novelese    
  55.     and.w #$1ff,addy
  56.     add.w #6,addz           ;zszog novelese        
  57.     and.w #$1ff,addz
  58.     lea coords(pc),a0        ;kocka pontjainak x,y,z koordinatai
  59.     lea sinus(pc),a1         ;sinus ertekek
  60.     lea $80(a1),a3           ;cosinus ertekek
  61.     lea tarolo(pc),a2        ;2D x,y letarolasa
  62.     lea addx(pc),a4          ;szogek
  63.     moveq #13,d7              ;8 pont van /kocka/
  64. h3    movem.w (a0)+,d0/d1/d6   ;x,y,z
  65.     move.w 4(a4),d5          ;Zszog
  66.     bsr calcul               ;Z-rotation
  67.     move.w d0,d6             ;X tarolasa
  68.     move.w d3,d0             ;Y
  69.     move.w (a4),d5           ;Xszog
  70.     bsr calcul               ;X-rotation
  71.     move.w d0,d6             ;uj Y tarolasa
  72.     move.w d3,d0             ;Z
  73.     move.w 2(a4),d5          ;Yszog
  74.     bsr calcul               ;Y-rotation
  75.     exg d0,d3                ;X csere Z-vel    Z=d3
  76.     moveq #11,d6             ;lekepezes 2D-re
  77.     move.w #$3b0,d2
  78.     sub.w d3,d2              ;$444-Z
  79.     muls d2,d0               ;z'*x
  80.     asr.l d6,d0              ;z'*x/2048=2D X
  81.     muls d2,d1               ;z'*y
  82.     asr.l d6,d1              ;z'*y/2048=2D Y
  83.     add.w #150,d0         ;X=X+150     kozepre a kepernyon           
  84.     add.w #100,d1            ;Y=Y+100
  85.     move.w d0,(a2)+         ;2D X tarolasa
  86.     move.w d1,(a2)+          ;2D Y tarolasa
  87.     cmp.w kisx(pc),d0        
  88.     bge th1
  89.     move.w d0,kisx           ;a legkisebb x tarolasa
  90. th1    cmp.w nagyx(pc),d0
  91.     ble th2
  92.     move.w d0,nagyx          ;a legnagyobb x tarolasa
  93. th2    cmp.w kisy(pc),d1
  94.     bge th3
  95.     move.w d1,kisy           ;a legkisebb y tarolasa
  96. th3    cmp.w nagyy(pc),d1
  97.     ble th4
  98.     move.w d1,nagyy          ;a legnagyobb y tarolasa
  99. th4    dbf d7,h3
  100.  
  101.     move.l #$ffff8000,$72(a6)  ;vonalhuzashoz standard ertekek
  102.     move.l #$ffffffff,$44(a6)
  103.     move.w #160,$60(a6)        ;kepernyo szelessege
  104.  
  105.     eor.w #$8000,erno+2        ;kepernyo csere
  106.     eor.w #$8000,copscr       ;csere a copperben is
  107.     eor.w #$8000,copscr+4
  108.     eor.w #$8000,copscr+8
  109.     eor.w #$8000,copscr+12
  110.  
  111.     bsr calsize
  112.     movem.l d4/d7/a0,-(a7)
  113.     bsr wait                     ;waitblitter
  114.     move.w d4,$66(a6)            ;clrscr 
  115.     move.l #$01000002,$40(a6)
  116.     move.l a0,$54(a6)
  117.     move.w d7,$58(a6)
  118.     
  119.     lea tarolo(pc),a1          ;2D x,y ertekek
  120.     lea meghat(pc),a2          ;structure
  121.     lea sinus+$400(pc),a3      ;sor kezdopontja /0-f/ + $a4a or $b4a
  122.     lea sinus+$680(pc),a5      ;szelesseg/2/ es vonal hossz values
  123.     move.w (a2)+,lap           ;lapok szama /6/
  124. h7    move.l (a2)+,d7            ;hany pontot kosson ossze
  125.     move.l (a2)+,a4            ;oszzekotesi sorrend
  126.     move.l (a2)+,scr           ;melyik kepernyore
  127.     move.l (a2)+,col           ;mutato a szinpalettara,melyik szin a copp.
  128.     move.l erno(pc),a0         ;ide rajzol
  129.     movem.w (a4),d0/d1/d2      ;lathatosag eldontese
  130.     move.w (a1,d1.w),d3        ;x1
  131.     sub.w (a1,d0.w),d3         ;X1-X0
  132.     move.w 2(a1,d2.w),d4       ;y2
  133.     sub.w 2(a1,d1.w),d4        ;Y2-Y1
  134.     move.w 2(a1,d1.w),d5       ;y1
  135.     sub.w 2(a1,d0.w),d5        ;Y1-Y0
  136.     move.w (a1,d2.w),d6        ;x2
  137.     sub.w (a1,d1.w),d6         ;X2-X1
  138.     mulu d4,d3                 ;(y2-y1)(x1-x0)=d3
  139.     mulu d6,d5                 ;(y1-y0)(x2-x1)=d5
  140.     sub.w d5,d3                
  141.     bmi vakon                   ;nem latszik
  142.     moveq #9,d5                 ;512
  143.     lsr.w d5,d3                 ;d3=d3/512
  144.     and.l #$f,d3               ;also 4 bit levalasztasa
  145.     add.w d3,d3                ;word
  146.     movem.l a0/a1,-(a7)
  147.     lea colors(pc),a0          ;szinek
  148.     lea copcol(pc),a1          ;copperben a szinek
  149.     add.w col(pc),a0           ;uj szin
  150.     add.w col+2(pc),a1         ;melyik szin a copperban
  151.     move.w (a0,d3.w),d3        ;uj szin bekerese
  152.     move.w d3,(a1)
  153.     movem.l (a7)+,a0/a1
  154.     move.w (a4)+,d5            ;1.pont
  155.     move.w (a1,d5.w),d0        ;x1 koordinata
  156.     move.w 2(a1,d5.w),d1       ;y1 koordinata
  157.     bsr lines                  ;vonalhuzo
  158. vakon    subq.w #1,lap              ;lapszam csokkentes
  159.     bne h7                     ;van meg ?
  160.     movem.l (a7)+,d4/d7/a0
  161.     bsr wait                    ;uzemmodban dolgozik
  162.     move.l #$09f00012,$40(a6)   
  163.     move.w d4,$64(a6)
  164.     move.w d4,$66(a6)
  165.     move.l a0,$50(a6)
  166.     move.l a0,$54(a6)
  167.     move.w d7,$58(a6)       ;feltolt
  168.     rts
  169.  
  170. lines    move.w (a4)+,d5          ;kovetkezo pont
  171.     move.w (a1,d5.w),d2      ;x2
  172.     move.w 2(a1,d5.w),d3     ;y2
  173.     movem.w d2/d3,-(a7)      ;kovetkezo pont latarolasa
  174.     cmp.w d1,d3              ;y2-y1
  175.     bgt p1
  176.     exg d0,d2                ;kisebb --> coords csere                
  177.     exg d1,d3                ;mindig a nagyobb y-bol kell huzni !
  178.     beq not                  
  179. p1    move.w #160,d5           ;kepernyo szelessege
  180.     move.w d1,d4             ;nagyobb y
  181.     mulu d5,d4               ;120*y = pont sora
  182.     move.w d0,d5             ;x0
  183.     add.l a0,d4              ;$30000+x0 = pont oszlopa
  184.     lsr.w #3,d5              ;pont sora/8
  185.     add.w d5,d4              ;megkapja a pont helyet
  186.     moveq #0,d5
  187.     sub.w d1,d3              ;Y
  188.     sub.w d0,d2              ;X   /x1-x2/
  189.     bpl p2
  190.     moveq #1,d5              ;x2 kisebb volt,a kapott X negativ 
  191.     neg.w d2                 ;most mar pozitiv X
  192. p2    move.w d3,d1             ;Y
  193.     add.w d1,d1              ;2Y
  194.     cmp.w d2,d1              ;X-2Y
  195.     dbhi d3,p3               ;csokkenti Y-t ha
  196. p3    move.w d3,d1             ;Y
  197.     sub.w d2,d1              ;Y-X
  198.     bpl p4
  199.     exg d2,d3                ;X csereje Y-al
  200. p4    addx.w d5,d5
  201.     add.w d2,d2              ;2Y             
  202.     move.w d2,d1             ;2Y
  203.     sub.w d3,d2              ;2Y-X
  204.     addx.w d5,d5
  205.     add.w d0,d0
  206.     move.w d2,d6
  207.     sub.w d3,d6
  208.     add.w d3,d3
  209. ok    move.w (a5,d3.w),d3         ;$58
  210.     move.w (a3,d0.w),d0         ;$40
  211.     move.b dat(pc,d5.w),d5      ;melyik siknyolcad
  212.     bsr okvonal                 ;vonalrajz
  213. not    movem.w (a7)+,d0/d1
  214.     dbf d7,lines
  215.     rts
  216. dat    dc.l $3431353,$b4b1757     ;siknyolcad    
  217.  
  218. okvonal    move.l d7,-(a7)
  219.     moveq #3,d7                ;3 lehetoseg
  220.     swap d2                    ;a d2-ot felhasznalom
  221.     move.w scr+2(pc),d2        ;melyik kepernyore
  222. loop    lsr.w #1,d2                ;az also 3 bit donti el
  223.     bcc noo                    ;Carry=0 --> nem kell
  224.     bsr wait
  225.     swap d2                    ;eredeti d2
  226.     move.w d2,$52(a6)           ;2y-x
  227.     move.w d0,$40(a6)           ;12-15-->sor kezdopontja /0-f/ + a4a
  228.     move.b d5,$43(a6)           ;siknyolcad
  229.     move.l d4,$48(a6)           ;vonal kezdocime
  230.     move.l d4,$54(a6)           ;vonal kezdocime
  231.     move.w d1,$62(a6)           ;2y
  232.     move.w d6,$64(a6)           ;2y-2x
  233.     move.w d3,$58(a6)           ;szelesseg=2 , magassag=vonal hossza
  234.     swap d2
  235. noo    add.l #$28,d4                ;kovetkezo kepernyo
  236.     dbf d7,loop
  237.     move.l (a7)+,d7
  238.     rts
  239.         
  240.     
  241. calcul    move.w (a3,d5.w),d4     ;cos ertek
  242.     move.w (a1,d5.w),d5     ;sin ertek
  243.     move.w d0,d2            ;c1
  244.     move.w d1,d3        ;c2
  245.     muls d4,d0        ;c1*cos(c0angle)
  246.     muls d5,d1        ;c2*sin(c0angle)
  247.     muls d4,d3        ;c2*cos(c0angle)
  248.     muls d5,d2        ;c1*sin(c0angle)
  249.     sub.l d1,d0        ;c1*cos(c0angle)-c2*sin(c0angle)
  250.     add.l d2,d3        ;c2*cos(c0angle)+c1*sin(c0angle)
  251.     add.l d0,d0        
  252.     add.l d3,d3
  253.     swap d0                 ;uj c1
  254.     swap d3                 ;uj c2
  255.     move.w d6,d1        
  256.     rts
  257.  
  258. calsize    movem.w kisx(pc),d0-d3   ;d0=kisx d1=kisy d2=nagyx d3=nagyy
  259.     addq.w #8,d2
  260.     addq.w #8,d3
  261.     sub.w #48,d0
  262.     move.l erno(pc),a0
  263.     clr.l d4
  264.     clr.l d6
  265.     move.w d3,d4             ;nagyy
  266.     mulu #$a0,d4             ;modulo*nagyy
  267.     add.l d4,a0              ;legnagyobb sor ahol gfx van
  268.     move.w #$28,d4           ;next screen
  269.     moveq #0,d7
  270.     sub.w d1,d3              ;y=nagyy-kisy
  271.     mulu #5,d3
  272.     move.w d3,d7             
  273.     lsl.w #6,d7              ;$58(a6)  vertical
  274.     move.w d2,d6             ;nagyx
  275.     lsr.w #3,d6              ;nagyx/8
  276.     btst #0,d6
  277.     beq paros
  278.     addq.w #1,d6
  279. paros    add.l d6,a0              ;erno+maxsor+maxoszlop
  280.     clr.l d1
  281.     sub.w d0,d2              ;x=nagyx-kisx
  282.     btst #0,d2
  283.     beq par2
  284.     addq.w #1,d2
  285. par2    move.w d2,d1             ;x
  286.     lsr.w #4,d1              ;x/16
  287.     or.w d1,d7               ;$58(a6)   horizontal
  288.     lsl.w #1,d1
  289.     btst #0,d1
  290.     beq rtb
  291.     addq.w #1,d1
  292. rtb    sub.w d1,d4         ;modulo
  293.     rts
  294.  
  295. wait    btst #$e,2(a6)          ;waitblitter
  296.     bne wait
  297.     rts
  298.  
  299.  
  300.  
  301. copper    dc.w $100,$200,$8e,$2c81,$90,$2cc1,$92,$38,$94,$d0
  302.     dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0
  303.     dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
  304.     dc.w $180,0,$108,$78,$10a,$78,$182
  305. copcol    dc.w 0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0,$190,0,$192,0
  306.     dc.w $194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0
  307.     dc.w $e0,3,$e4,3,$e8,3,$ec,3,$e2
  308. copscr    dc.w 0,$e6,$28,$ea,$50,$ee,$78
  309.     dc.w $3001,$fffe,$100,$4200,$180,$ff0,$3101,$fffe,$180,0
  310.     dc.w $f001,$fffe,$100,$200,$180,$ff0,$f101,$fffe,$180,0
  311.     dc.w $ffff,$fffe
  312.  
  313. coords    dc.w -100,100,100,100,100,100,100,-100,100,-100,-100,100
  314.     dc.w 0,0,170,-100,100,-100,100,100,-100,100,-100,-100
  315.     dc.w -100,-100,-100,0,0,-170,-170,0,0,0,170,0,170,0,0,0,-170,0
  316.  
  317. ;******************** $26 a szinek tavolsaga !!!! **************
  318. ;0,$1c,$38,$54,$70,$8c,$a8,$c4,$e0,$fc
  319.  
  320. ;1:alap 2:alap+$28 3:alap,alap+$28 4:alap+$50 5:alap,alap+$50 
  321. ;6:alap+$28,alap+$50 7:alap,alap+$28,alap+$50
  322. meghat    dc.w 24   
  323.     dc.l 2,kot1,1,$00380000         ;$182  cyan
  324.     dc.l 2,kot2,2,$00380004         ;$184  sarga
  325.     dc.l 2,kot3,3,$00380008         ;$186  lila
  326.     dc.l 2,kot4,4,$0038000c         ;$188  sarga
  327.     dc.l 2,kot5,1,$00540000         ;$182  lila
  328.     dc.l 2,kot6,2,$00540004         ;$184  cyan
  329.     dc.l 2,kot7,3,$00540008         ;$186
  330.     dc.l 2,kot8,4,$0054000c         ;$188
  331.     dc.l 2,kot9,5,$00a80010         ;$18a
  332.     dc.l 2,kot10,6,$00a80014        ;$18c
  333.     dc.l 2,kot11,7,$00a80018        ;$18e
  334.     dc.l 2,kot12,8,$00a8001c        ;$190
  335.     dc.l 2,kot13,7,$00c40018        ;$18e
  336.     dc.l 2,kot14,8,$00c4001c        ;$190
  337.     dc.l 2,kot15,5,$00c40010        ;$18a
  338.     dc.l 2,kot16,6,$00c40014        ;$18c
  339.     dc.l 2,kot17,9,$00e00020        ;$192
  340.     dc.l 2,kot18,10,$00e00024       ;$194
  341.     dc.l 2,kot19,11,$00e00028       ;$196
  342.     dc.l 2,kot20,12,$00e0002c       ;$198
  343.     dc.l 2,kot21,11,$00fc0028       ;$196
  344.     dc.l 2,kot22,10,$00fc0024       ;$194
  345.     dc.l 2,kot23,9,$00fc0020        ;$192
  346.     dc.l 2,kot24,12,$00fc002c       ;$198
  347.     
  348.     
  349. kot1    dc.w 0,4,16,0       
  350. kot2    dc.w 4,8,16,4        
  351. kot3    dc.w 8,12,16,8       
  352. kot4    dc.w 12,0,16,12   
  353. kot5    dc.w 32,28,36,32
  354. kot6     dc.w 20,32,36,20
  355. kot7    dc.w 24,20,36,24
  356. kot8    dc.w 28,24,36,28
  357. kot9    dc.w 4,24,48,4
  358. kot10    dc.w 24,28,48,24
  359. kot11    dc.w 28,8,48,28
  360. kot12    dc.w 8,4,48,8
  361. kot13    dc.w 20,0,40,20
  362. kot14    dc.w 32,20,40,32
  363. kot15    dc.w 12,32,40,12
  364. kot16    dc.w 0,12,40,0
  365. kot17    dc.w 4,0,44,4
  366. kot18    dc.w 0,20,44,0
  367. kot19    dc.w 20,24,44,20
  368. kot20    dc.w 24,4,44,24
  369. kot21    dc.w 12,8,52,12
  370. kot22    dc.w 8,28,52,8
  371. kot23    dc.w 28,32,52,28
  372. kot24    dc.w 32,12,52,32
  373.  
  374. ;                         kek
  375. colors    dc.w 2,3,4,5,6,7,8,9,10,11,12,13,14,15
  376. ;                         piros
  377.     dc.w $200,$300,$400,$500,$600,$700,$800,$900,$a00,$b00
  378.     dc.w $c00,$d00,$e00,$f00
  379. ;                         zold
  380.     dc.w $20,$30,$40,$50,$60,$70,$80,$90,$a0,$b0,$c0,$d0,$e0,$f0
  381. ;              sarga
  382.     dc.w $220,$330,$440,$550,$660,$770,$880,$990,$aa0,$bb0,$cc0
  383.     dc.w $dd0,$ee0,$ff0
  384. ;              lila    
  385.     dc.w $202,$303,$404,$505,$606,$707,$808,$909,$a0a,$b0b,$c0c
  386.     dc.w $d0d,$e0e,$f0f
  387. ;              cyan
  388.     dc.w $22,$33,$44,$55,$66,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  389. ;              feher
  390.     dc.w $222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb,$ccc,$ddd
  391.     dc.w $eee,$fff
  392. ;                         aranysarga
  393.     dc.w $200,$310,$420,$530,$640,$750,$860,$970,$a80,$b90,$ca0,$db0
  394.     dc.w $ec0,$fd0
  395. ;              barna
  396.     dc.w $200,$310,$420,$531,$642,$753,$864,$975,$a86,$b97,$ca8,$db9
  397.     dc.w $eca,$fdb
  398. ;                         pritamin zold
  399.     dc.w $20,$130,$240,$350,$460,$570,$680,$790,$8a0,$9b0,$ac0,$bd0
  400.     dc.w $ce0,$df0
  401.  
  402.  
  403. addx    dc.w 0             ;xangle 
  404. addy    dc.w 0            ;yangle
  405. addz    dc.w 0             ;zangle
  406. lap    dc.w 0             ;siklapok szama/object
  407. scr    dc.l 0             ;kepernyo
  408. col    dc.l 0             ;color , coppercolor
  409. kisx    dc.w 0
  410. kisy    dc.w 0
  411. nagyx    dc.w 0
  412. nagyy    dc.w 0
  413. erno    dc.l $38000        ;kepernyo
  414. sinus    incbin "Coleccion_Sources1:Sources/Vectores/raytr.dat"
  415. tarolo    blk.b 100,0
  416.  
  417.